#include "../lvgl/lvgl.h"
#include "img_playback.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>

static P_Node_t g_current_node = NULL;
static P_Node_t head = NULL;
static lv_obj_t *current_img = NULL;
static lv_obj_t *lable = NULL;
static lv_obj_t *area = NULL;



void gif_Fun(P_Node_t Node)
{
    if (current_img)
    {
        lv_obj_del(current_img);
        current_img = NULL;
    }
    // 创建一个gif显示对象
    current_img = lv_gif_create( area );

    // 设置它的显示图像内容
    char img_src[256];
    snprintf(img_src, sizeof(img_src), "S:%s", Node->name);
    lv_gif_set_src(current_img, img_src);

    // 设置对齐方式
    lv_obj_align(current_img, LV_ALIGN_CENTER, 0, 0);
}

void jpg_png_Fun(P_Node_t Node)
{
    if (current_img)
    {
        lv_obj_del(current_img);
        current_img = NULL;
    }
    // 使用文件进行显示
    current_img = lv_img_create( area );

    // 设置需要显示的文件路径（建议使用绝对路径）
    char img_src[256];
    snprintf(img_src, sizeof(img_src), "S:%s", Node->name);
    lv_img_set_src(current_img, img_src);

    // 设置对齐方式
    lv_obj_align(current_img, LV_ALIGN_CENTER, 0, 0);
}

void event_handler_prev(lv_event_t *e)
{
    if (!g_current_node) return;
    if(g_current_node->prev == head) 
        g_current_node = g_current_node->prev;
    g_current_node = g_current_node->prev;  // 更新全局指针
    display_image(g_current_node);
}

void event_handler_next(lv_event_t *e)
{
    if (!g_current_node) return;
    if(g_current_node->next == head) 
        g_current_node = g_current_node->next;
    g_current_node = g_current_node->next;  // 更新全局指针
    display_image(g_current_node);
}

//释放内存
// void img_playback_deinit() {
//     if (g_current_node) {
//         P_Node_t start = g_current_node;
//         do {
//             P_Node_t next = g_current_node->next;
//             free(g_current_node);
//             g_current_node = next;
//         } while (g_current_node != start);
//     }
//     g_current_node = NULL;
//     if (current_img) {
//         lv_obj_del(current_img);
//         current_img = NULL;
//     }
// }


void display_image(P_Node_t Node)
{
    if (Node == NULL) return;
    
    char *str = strrchr(Node->name, '.');
    if (strcmp(str, ".gif") == 0)
    {
        gif_Fun(Node);
    }
    else if (strcmp(str, ".jpg") == 0 || strcmp(str, ".png") == 0)
    {
        jpg_png_Fun(Node);
    }

    if (lable)
    {
        lv_obj_del(lable);
        lable = NULL;
    }
    lable = lv_label_create( lv_scr_act() );
    // 设置尺寸
    lv_obj_set_width(  lable , 400 );
    lv_obj_set_height( lable , 80 ) ;
    lv_obj_set_align( lable ,  LV_ALIGN_BOTTOM_MID );
    // 设置字体颜色
    lv_obj_set_style_text_color(lable,  lv_color_hex(0x0000ff) , _LV_STYLE_STATE_CMP_SAME );
    // 设置字体
    lv_obj_set_style_text_font(lable , &lv_font_montserrat_32 , 0 );
    // 设置信息
    lv_label_set_text( lable , Node->name);
    // 设置长文本模式 
    lv_label_set_long_mode(lable , LV_LABEL_LONG_SCROLL_CIRCULAR );
}

void img_playback()
{
    head = Node_Init(NULL);
    Search_Recursion(head, "/userdata/Linjie/img", ".gif");
    Search_Recursion(head, "/userdata/Linjie/img", ".jpg");
    Search_Recursion(head, "/userdata/Linjie/img", ".png");

    area = lv_obj_create(lv_scr_act());
    lv_obj_set_size(  area , 800 , 480 );
    lv_obj_set_y(  area , -80 );
    lv_obj_set_align( area , LV_ALIGN_CENTER );

    g_current_node = head->next;
    if (g_current_node == head) {
        printf("No images found in the directory.\n");
        return;
    }

    display_image(g_current_node);

    // 创建按钮
    lv_obj_t * btn1 = lv_btn_create(lv_scr_act());
    // 设置对齐方式 LV_ALIGN_BOTTOM_LEFT 左下角
    lv_obj_align(btn1, LV_ALIGN_BOTTOM_LEFT, 50, -50);
    // 给按钮添加标签
    lv_obj_t * label1 = lv_label_create(btn1);
    // 设置标签的文本
    lv_label_set_text(label1, "Prev");
    // 设置居中对齐
    lv_obj_center(label1);
    // 设置字体
    lv_obj_set_style_text_font(label1, &lv_font_montserrat_32, 0);
    // 添加回调函数（给按钮注册一个按下后的响应函数）
    lv_obj_add_event_cb(btn1, event_handler_prev, LV_EVENT_CLICKED, NULL);

    // 创建按钮
    lv_obj_t * btn2 = lv_btn_create(lv_scr_act());
    // 设置对齐方式 LV_ALIGN_BOTTOM_LEFT 左下角
    lv_obj_align(btn2, LV_ALIGN_BOTTOM_RIGHT, -50, -50);
    // 给按钮添加标签
    lv_obj_t * label2 = lv_label_create(btn2);
    // 设置标签的文本
    lv_label_set_text(label2, "Next");
    // 设置居中对齐
    lv_obj_center(label2);
    // 设置字体
    lv_obj_set_style_text_font(label2, &lv_font_montserrat_32, 0);
    // 添加回调函数（给按钮注册一个按下后的响应函数）
    lv_obj_add_event_cb(btn2, event_handler_next, LV_EVENT_CLICKED, NULL);
}


